package cn.demoncat.util.pdf.itextpdf.event;

import com.itextpdf.kernel.events.Event;
import com.itextpdf.kernel.events.IEventHandler;
import com.itextpdf.kernel.events.PdfDocumentEvent;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.layout.Canvas;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.property.TextAlignment;

import cn.demoncat.util.pdf.itextpdf.entity.PdfParam;

/**
 * 页码
 * 
 * @author 延晓磊
 *
 * @since 2020年6月4日
 */
public class PageMarker implements IEventHandler {

	// 字体
	private final PdfFont font;
	// 参数
	private final PdfParam param;
		
	/**
	 * 页码处理器
	 * 
	 * @param font
	 * @param param	页码类型；统计页数
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年6月4日
	 */
	public PageMarker(PdfFont font, PdfParam param) {
		super();
		this.font = font;
		this.param = param;
	}

	/**
	 * 事件监听
	 * 
	 * @param event
	 *
	 * @author 延晓磊
	 *
	 * @since 2020年6月4日
	 */
	@Override
	public void handleEvent(Event event) {
		// 获取文档
		PdfDocumentEvent docEvent = (PdfDocumentEvent) event;
		PdfDocument doc = docEvent.getDocument();
		// 获取页面
		PdfPage page = docEvent.getPage();
		int num = doc.getPageNumber(page);
		param.setPageCount(num);
		if(param.getPager() != 0) {
			// 创建画布
			PdfCanvas pdfCanvas = new PdfCanvas(page.getLastContentStream(), page.getResources(), doc);
			Rectangle pageSize = page.getPageSize();
			Canvas canvas = new Canvas(pdfCanvas, pageSize);
			// 绘制页码
			float x = (pageSize.getLeft() + pageSize.getRight()) / 2;
			float y = pageSize.getBottom() + 15;
			Paragraph p;
			if (font == null) {
				// 数字页码
				p = new Paragraph("" + num).setFontSize(12);
			} else {
				// 中文页码
				p = new Paragraph("第" + num + "页").setFontSize(12).setFont(font);
			}
			canvas.showTextAligned(p, x, y, TextAlignment.CENTER);
			canvas.close();
		}
	}
}
